JavaScriptã®ã€ãã¬ãŒã¿ãã«ããŒãã¹ããªãŒãã³ã°ããŒã¿åŠçã«ããããªãœãŒã¹ç®¡çãã©ã®ããã«åŒ·åããããæ¢ããŸããå¹ççã§ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®æé©åæè¡ãåŠã³ãŸãããã
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ãªãœãŒã¹ç®¡çïŒã¹ããªãŒã ãªãœãŒã¹ã®æé©å
çŸä»£ã®JavaScriptéçºã§ã¯ãããŒã¿ã¹ããªãŒã ãæ±ãããšãé »ç¹ã«ãããŸããå€§èŠæš¡ãªãã¡ã€ã«ã®åŠçããªã¢ã«ã¿ã€ã ã®ããŒã¿ãã£ãŒãã®åŠçãAPIã¬ã¹ãã³ã¹ã®ç®¡çãªã©ãã¹ããªãŒã åŠçäžã®ãªãœãŒã¹ãå¹ççã«ç®¡çããããšã¯ãããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã«ãšã£ãŠéåžžã«éèŠã§ããES2015ã§å°å ¥ãããéåæã€ãã¬ãŒã¿ããžã§ãã¬ãŒã¿ã§åŒ·åãããã€ãã¬ãŒã¿ãã«ããŒã¯ããã®èª²é¡ã«åãçµãããã®åŒ·åãªããŒã«ãæäŸããŸãã
ã€ãã¬ãŒã¿ãšãžã§ãã¬ãŒã¿ã®çè§£
ãªãœãŒã¹ç®¡çã«å ¥ãåã«ãã€ãã¬ãŒã¿ãšãžã§ãã¬ãŒã¿ã«ã€ããŠç°¡åã«åŸ©ç¿ããŸãããã
ã€ãã¬ãŒã¿ã¯ãã·ãŒã±ã³ã¹ãšããã®ã¢ã€ãã ã«äžåºŠã«äžã€ãã€ã¢ã¯ã»ã¹ããæ¹æ³ãå®çŸ©ãããªããžã§ã¯ãã§ããã€ãã¬ãŒã¿ã¯ãã€ãã¬ãŒã¿ãããã³ã«ã«åŸããŸãããã®ãããã³ã«ã§ã¯ãvalueïŒã·ãŒã±ã³ã¹ã®æ¬¡ã®ã¢ã€ãã ïŒãšdoneïŒã·ãŒã±ã³ã¹ãå®äºãããã©ããã瀺ãããŒã«å€ïŒã®2ã€ã®ããããã£ãæã€ãªããžã§ã¯ããè¿ãnext()ã¡ãœãããå¿
èŠã§ãã
ãžã§ãã¬ãŒã¿ã¯ãäžæåæ¢ããã³åéãå¯èœãªç¹æ®ãªé¢æ°ã§ãæéçµéãšãšãã«äžé£ã®å€ãçæããããšãã§ããŸããyieldããŒã¯ãŒãã䜿çšããŠå€ãè¿ããå®è¡ãäžæåæ¢ããŸãããžã§ãã¬ãŒã¿ã®next()ã¡ãœãããåã³åŒã³åºããããšãäžæãããšããããå®è¡ãåéãããŸãã
äŸïŒ
function* numberGenerator(limit) {
for (let i = 0; i <= limit; i++) {
yield i;
}
}
const generator = numberGenerator(3);
console.log(generator.next()); // Output: { value: 0, done: false }
console.log(generator.next()); // Output: { value: 1, done: false }
console.log(generator.next()); // Output: { value: 2, done: false }
console.log(generator.next()); // Output: { value: 3, done: false }
console.log(generator.next()); // Output: { value: undefined, done: true }
ã€ãã¬ãŒã¿ãã«ããŒïŒã¹ããªãŒã åŠçã®ç°¡çŽ å
ã€ãã¬ãŒã¿ãã«ããŒã¯ãã€ãã¬ãŒã¿ã®ãããã¿ã€ãïŒåæããã³éåæã®äž¡æ¹ïŒã§å©çšå¯èœãªã¡ãœããã§ããããã«ãããã€ãã¬ãŒã¿ã«å¯Ÿããäžè¬çãªæäœãç°¡æœãã€å®£èšçã«å®è¡ã§ããŸãããããã®æäœã«ã¯ããããã³ã°ããã£ã«ã¿ãªã³ã°ããªãã¥ãŒã¹ãªã©ãå«ãŸããŸãã
äž»ãªã€ãã¬ãŒã¿ãã«ããŒã«ã¯ã以äžã®ãããªãã®ããããŸãïŒ
map(): ã€ãã¬ãŒã¿ã®åèŠçŽ ã倿ããŸããfilter(): æ¡ä»¶ãæºããèŠçŽ ãéžæããŸããreduce(): èŠçŽ ãåäžã®å€ã«éçŽããŸããtake(): ã€ãã¬ãŒã¿ã®æåã®Nåã®èŠçŽ ãååŸããŸããdrop(): ã€ãã¬ãŒã¿ã®æåã®Nåã®èŠçŽ ãã¹ãããããŸããforEach(): åèŠçŽ ã«å¯ŸããŠæäŸããã颿°ãäžåºŠå®è¡ããŸããtoArray(): ãã¹ãŠã®èŠçŽ ãé åã«åéããŸãã
å³å¯ãªæå³ã§ã®*ã€ãã¬ãŒã¿*ãã«ããŒã§ã¯ãããŸãããïŒ*ã€ãã¬ãŒã¿*ã§ã¯ãªãããã®åºã«ãªã*ã€ãã©ãã«*ã®ã¡ãœããã§ããããïŒãArray.from()ã®ãããªé
åã¡ãœãããã¹ãã¬ããæ§æïŒ...ïŒããã€ãã¬ãŒã¿ãé
åã«å€æããŠãããªãåŠçãè¡ãããã«å¹æçã«äœ¿çšã§ããŸãããã ããããã«ãããã¹ãŠã®èŠçŽ ãäžåºŠã«ã¡ã¢ãªã«ããŒãããå¿
èŠãããããšãèªèããŠããå¿
èŠããããŸãã
ãããã®ãã«ããŒã«ããããã颿°çã§èªã¿ãããã¹ã¿ã€ã«ã®ã¹ããªãŒã åŠçãå¯èœã«ãªããŸãã
ã¹ããªãŒã åŠçã«ããããªãœãŒã¹ç®¡çã®èª²é¡
ããŒã¿ã¹ããªãŒã ãæ±ãéã«ã¯ãããã€ãã®ãªãœãŒã¹ç®¡çäžã®èª²é¡ãçããŸãïŒ
- ã¡ã¢ãªæ¶è²»ïŒ å€§èŠæš¡ãªã¹ããªãŒã ãåŠçãããšãæ éã«æ±ããªããšéå°ãªã¡ã¢ãªäœ¿çšã«ã€ãªããå¯èœæ§ããããŸããåŠçåã«ã¹ããªãŒã å šäœãã¡ã¢ãªã«ããŒãããããšã¯ãå€ãã®å ŽåéçŸå®çã§ãã
- ãã¡ã€ã«ãã³ãã«ïŒ ãã¡ã€ã«ããããŒã¿ãèªã¿åãéã«ã¯ããªãœãŒã¹ãªãŒã¯ãé¿ããããã«ãã¡ã€ã«ãã³ãã«ãé©åã«éããããšãäžå¯æ¬ ã§ãã
- ãããã¯ãŒã¯æ¥ç¶ïŒ ãã¡ã€ã«ãã³ãã«ãšåæ§ã«ããããã¯ãŒã¯æ¥ç¶ããªãœãŒã¹ãè§£æŸããæ¥ç¶ã®æ¯æžãé²ãããã«éããå¿ èŠããããŸããããã¯ç¹ã«APIãWebãœã±ãããæ±ãéã«éèŠã§ãã
- äžŠè¡æ§ïŒ 䞊è¡ã¹ããªãŒã ã䞊ååŠçã管çãããšããªãœãŒã¹ç®¡çãè€éã«ãªããæ éãªåæãšèª¿æŽãå¿ èŠã«ãªããŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒ ã¹ããªãŒã åŠçäžã®äºæãã¬ãšã©ãŒã¯ãé©åã«åŠçãããªããšãªãœãŒã¹ãäžæŽåãªç¶æ ã®ãŸãŸã«ããŠããŸãå¯èœæ§ããããŸããé©åãªã¯ãªãŒã³ã¢ãããä¿èšŒããããã«ã¯ãå ç¢ãªãšã©ãŒãã³ããªã³ã°ãäžå¯æ¬ ã§ãã
ã€ãã¬ãŒã¿ãã«ããŒããã®ä»ã®JavaScriptæè¡ã䜿çšããŠããããã®èª²é¡ã«å¯ŸåŠããããã®æŠç¥ãæ¢ã£ãŠã¿ãŸãããã
ã¹ããªãŒã ãªãœãŒã¹æé©åã®ããã®æŠç¥
1. é å»¶è©äŸ¡ãšãžã§ãã¬ãŒã¿
ãžã§ãã¬ãŒã¿ã¯é å»¶è©äŸ¡ãå¯èœã«ããŸããããã¯ãå€ãå¿ èŠã«ãªã£ããšãã«ã®ã¿çæãããããšãæå³ããŸããããã«ãããå€§èŠæš¡ãªã¹ããªãŒã ãæ±ãéã®ã¡ã¢ãªæ¶è²»ãå€§å¹ ã«åæžã§ããŸããã€ãã¬ãŒã¿ãã«ããŒãšçµã¿åãããããšã§ããªã³ããã³ãã§ããŒã¿ãåŠçããå¹ççãªãã€ãã©ã€ã³ãäœæã§ããŸãã
äŸïŒå€§èŠæš¡ãªCSVãã¡ã€ã«ã®åŠçïŒNode.jsç°å¢ïŒïŒ
const fs = require('fs');
const readline = require('readline');
async function* csvLineGenerator(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
try {
for await (const line of rl) {
yield line;
}
} finally {
// ãšã©ãŒãçºçããå Žåã§ãããã¡ã€ã«ã¹ããªãŒã ã確å®ã«éããããããã«ãã
fileStream.close();
}
}
async function processCSV(filePath) {
const lines = csvLineGenerator(filePath);
let processedCount = 0;
for await (const line of lines) {
// ãã¡ã€ã«å
šäœãã¡ã¢ãªã«ããŒãããã«åè¡ãåŠçãã
const data = line.split(',');
console.log(`Processing: ${data[0]}`);
processedCount++;
// äœããã®åŠçé
å»¶ãã·ãã¥ã¬ãŒããã
await new Promise(resolve => setTimeout(resolve, 10)); // I/OãCPUã®äœæ¥ãã·ãã¥ã¬ãŒããã
}
console.log(`Processed ${processedCount} lines.`);
}
// 䜿çšäŸ
const filePath = 'large_data.csv'; // å®éã®ãã¡ã€ã«ãã¹ã«çœ®ãæããŠãã ãã
processCSV(filePath).catch(err => console.error("Error processing CSV:", err));
説æïŒ
csvLineGenerator颿°ã¯ãfs.createReadStreamãšreadline.createInterfaceã䜿çšããŠCSVãã¡ã€ã«ãäžè¡ãã€èªã¿åããŸããyieldããŒã¯ãŒãã¯ãèªã¿åãããåè¡ãè¿ããæ¬¡ã®è¡ãèŠæ±ããããŸã§ãžã§ãã¬ãŒã¿ãäžæåæ¢ããŸããprocessCSV颿°ã¯ãfor await...ofã«ãŒãã䜿çšããŠè¡ãå埩åŠçãããã¡ã€ã«å šäœãã¡ã¢ãªã«ããŒãããããšãªãåè¡ãåŠçããŸãã- ãžã§ãã¬ãŒã¿å
ã®
finallyãããã¯ã¯ãåŠçäžã«ãšã©ãŒãçºçããå Žåã§ããã¡ã€ã«ã¹ããªãŒã ã確å®ã«éããããããã«ããŸããããã¯ãªãœãŒã¹ç®¡çã«ãšã£ãŠ*éåžžã«éèŠ*ã§ããfileStream.close()ã䜿çšããããšã§ããªãœãŒã¹ãæç€ºçã«å¶åŸ¡ã§ããŸãã - `setTimeout`ã䜿çšããåŠçé å»¶ã®ã·ãã¥ã¬ãŒã·ã§ã³ã¯ãé å»¶è©äŸ¡ã®éèŠæ§ã«å¯äžããçŸå®äžçã®I/OãŸãã¯CPUããŠã³ããªã¿ã¹ã¯ã衚çŸããããã«å«ãŸããŠããŸãã
2. éåæã€ãã¬ãŒã¿
éåæã€ãã¬ãŒã¿ïŒasync iteratorsïŒã¯ãAPIãšã³ããã€ã³ããããŒã¿ããŒã¹ã¯ãšãªãªã©ã®éåæããŒã¿ãœãŒã¹ãæ±ãããã«èšèšãããŠããŸããããŒã¿ãå©çšå¯èœã«ãªã次第åŠçã§ãããããããããã³ã°æäœãé²ããå¿çæ§ãåäžãããŸãã
äŸïŒéåæã€ãã¬ãŒã¿ã䜿çšããAPIããã®ããŒã¿ååŸïŒ
async function* apiDataGenerator(url) {
let page = 1;
while (true) {
const response = await fetch(`${url}?page=${page}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
if (data.length === 0) {
break; // ãã以äžããŒã¿ã¯ãããŸãã
}
for (const item of data) {
yield item;
}
page++;
// ãµãŒããŒã«éè² è·ããããªãããã«ã¬ãŒãå¶éãã·ãã¥ã¬ãŒããã
await new Promise(resolve => setTimeout(resolve, 500));
}
}
async function processAPIdata(url) {
const dataStream = apiDataGenerator(url);
try {
for await (const item of dataStream) {
console.log("Processing item:", item);
// ã¢ã€ãã ãåŠçãã
}
} catch (error) {
console.error("Error processing API data:", error);
}
}
// 䜿çšäŸ
const apiUrl = 'https://example.com/api/data'; // å®éã®APIãšã³ããã€ã³ãã«çœ®ãæããŠãã ãã
processAPIdata(apiUrl).catch(err => console.error("Overall error:", err));
説æïŒ
apiDataGenerator颿°ã¯ãAPIãšã³ããã€ã³ãããããŒã¿ãååŸããçµæãããŒãžããŒã·ã§ã³ããŸããawaitããŒã¯ãŒãã¯ãåAPIãªã¯ãšã¹ããå®äºããŠããæ¬¡ã®ãªã¯ãšã¹ããè¡ãããããšãä¿èšŒããŸããyieldããŒã¯ãŒãã¯ãååŸãããåã¢ã€ãã ãè¿ããæ¬¡ã®ã¢ã€ãã ãèŠæ±ããããŸã§ãžã§ãã¬ãŒã¿ãäžæåæ¢ããŸãã- HTTPã¬ã¹ãã³ã¹ã®å€±æããã§ãã¯ããããã®ãšã©ãŒãã³ããªã³ã°ãçµã¿èŸŒãŸããŠããŸãã
- ã¬ãŒãå¶éã¯ãAPIãµãŒããŒãžã®éè² è·ãé²ãããã«
setTimeoutã䜿çšããŠã·ãã¥ã¬ãŒããããŠããŸããããã¯APIçµ±åã«ããã*ãã¹ããã©ã¯ãã£ã¹*ã§ãã - ãã®äŸã§ã¯ããããã¯ãŒã¯æ¥ç¶ã¯
fetchAPIã«ãã£ãŠæé»çã«ç®¡çãããŠããããšã«æ³šæããŠãã ãããããè€éãªã·ããªãªïŒäŸãã°ãæ°žç¶çãªWebãœã±ããã䜿çšããå ŽåïŒã§ã¯ãæç€ºçãªæ¥ç¶ç®¡çãå¿ èŠã«ãªãå ŽåããããŸãã
3. äžŠè¡æ§ã®å¶é
ã¹ããªãŒã ã䞊è¡ããŠåŠçããå ŽåããªãœãŒã¹ã®éè² è·ãé¿ããããã«åææäœã®æ°ãå¶éããããšãéèŠã§ããã»ããã©ãã¿ã¹ã¯ãã¥ãŒãªã©ã®æè¡ã䜿çšããŠäžŠè¡æ§ãå¶åŸ¡ã§ããŸãã
äŸïŒã»ããã©ã«ããäžŠè¡æ§ã®å¶éïŒ
class Semaphore {
constructor(max) {
this.max = max;
this.count = 0;
this.waiting = [];
}
async acquire() {
if (this.count < this.max) {
this.count++;
return;
}
return new Promise(resolve => {
this.waiting.push(resolve);
});
}
release() {
this.count--;
if (this.waiting.length > 0) {
const resolve = this.waiting.shift();
resolve();
this.count++; // è§£æŸãããã¿ã¹ã¯ã®ããã«ã«ãŠã³ããå
ã«æ»ã
}
}
}
async function processItem(item, semaphore) {
await semaphore.acquire();
try {
console.log(`Processing item: ${item}`);
// äœããã®éåææäœãã·ãã¥ã¬ãŒããã
await new Promise(resolve => setTimeout(resolve, 200));
console.log(`Finished processing item: ${item}`);
} finally {
semaphore.release();
}
}
async function processStream(data, concurrency) {
const semaphore = new Semaphore(concurrency);
const promises = data.map(async item => {
await processItem(item, semaphore);
});
await Promise.all(promises);
console.log("All items processed.");
}
// 䜿çšäŸ
const data = Array.from({ length: 10 }, (_, i) => i + 1);
const concurrencyLevel = 3;
processStream(data, concurrencyLevel).catch(err => console.error("Error processing stream:", err));
説æïŒ
Semaphoreã¯ã©ã¹ã¯ãåææäœã®æ°ãå¶éããŸããacquire()ã¡ãœããã¯ãèš±å¯ãå©çšå¯èœã«ãªããŸã§ãããã¯ããŸããrelease()ã¡ãœããã¯èš±å¯ãè§£æŸããå¥ã®æäœãé²è¡ã§ããããã«ããŸããprocessItem()颿°ã¯ãã¢ã€ãã ãåŠçããåã«èš±å¯ãååŸããåŠçåŸã«è§£æŸããŸããfinallyãããã¯ã¯ããšã©ãŒãçºçããå Žåã§ãè§£æŸã*ä¿èšŒ*ããŸããprocessStream()颿°ã¯ãæå®ããã䞊è¡ã¬ãã«ã§ããŒã¿ã¹ããªãŒã ãåŠçããŸãã- ãã®äŸã¯ãéåæJavaScriptã³ãŒãã§ãªãœãŒã¹äœ¿çšéãå¶åŸ¡ããããã®äžè¬çãªãã¿ãŒã³ã瀺ããŠããŸãã
4. ãšã©ãŒãã³ããªã³ã°ãšãªãœãŒã¹ã¯ãªãŒã³ã¢ãã
å
ç¢ãªãšã©ãŒãã³ããªã³ã°ã¯ããšã©ãŒãçºçããå Žåã«ãªãœãŒã¹ãé©åã«ã¯ãªãŒã³ã¢ãããããããšãä¿èšŒããããã«äžå¯æ¬ ã§ããtry...catch...finallyãããã¯ã䜿çšããŠäŸå€ãåŠçããfinallyãããã¯ã§ãªãœãŒã¹ãè§£æŸããŸããfinallyãããã¯ã¯ãäŸå€ãã¹ããŒããããã©ããã«é¢ããã*åžžã«*å®è¡ãããŸãã
äŸïŒtry...catch...finallyã«ãããªãœãŒã¹ã¯ãªãŒã³ã¢ããã®ä¿èšŒïŒ
const fs = require('fs');
async function processFile(filePath) {
let fileHandle = null;
try {
fileHandle = await fs.promises.open(filePath, 'r');
const stream = fileHandle.createReadStream();
for await (const chunk of stream) {
console.log(`Processing chunk: ${chunk.toString()}`);
// ãã£ã³ã¯ãåŠçãã
}
} catch (error) {
console.error(`Error processing file: ${error}`);
// ãšã©ãŒãåŠçãã
} finally {
if (fileHandle) {
try {
await fileHandle.close();
console.log('File handle closed successfully.');
} catch (closeError) {
console.error('Error closing file handle:', closeError);
}
}
}
}
// 䜿çšäŸ
const filePath = 'data.txt'; // å®éã®ãã¡ã€ã«ãã¹ã«çœ®ãæããŠãã ãã
// ãã¹ãçšã®ãããŒãã¡ã€ã«ãäœæãã
fs.writeFileSync(filePath, 'This is some sample data.\nWith multiple lines.');
processFile(filePath).catch(err => console.error("Overall error:", err));
説æïŒ
processFile()颿°ã¯ãã¡ã€ã«ãéãããã®å 容ãèªã¿åããåãã£ã³ã¯ãåŠçããŸããtry...catch...finallyãããã¯ã¯ãåŠçäžã«ãšã©ãŒãçºçããå Žåã§ããã¡ã€ã«ãã³ãã«ã確å®ã«éããããããšãä¿èšŒããŸããfinallyãããã¯ã¯ããã¡ã€ã«ãã³ãã«ãéããŠãããã©ããã確èªããå¿ èŠã§ããã°éããŸãããŸããã¯ããŒãºæäœèªäœã§çºçããå¯èœæ§ã®ãããšã©ãŒãåŠçããããã«ã*ç¬èªã®*try...catchãããã¯ãå«ãŸããŠããŸãããã®ãã¹ãããããšã©ãŒãã³ããªã³ã°ã¯ãã¯ãªãŒã³ã¢ããæäœã®å ç¢æ§ã確ä¿ããããã«éèŠã§ãã- ãã®äŸã¯ããªãœãŒã¹ãªãŒã¯ãé²ããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ã確ä¿ããããã®åªé ãªãªãœãŒã¹ã¯ãªãŒã³ã¢ããã®éèŠæ§ã瀺ããŠããŸãã
5. Transformã¹ããªãŒã ã®äœ¿çš
Transformã¹ããªãŒã ã䜿çšãããšãããŒã¿ãã¹ããªãŒã ãæµããéã«åŠçãè¡ãããã圢åŒããå¥ã®åœ¢åŒã«å€æã§ããŸãããããã¯ãå§çž®ãæå·åãããŒã¿æ€èšŒãªã©ã®ã¿ã¹ã¯ã«ç¹ã«åœ¹ç«ã¡ãŸãã
äŸïŒzlibã䜿çšããããŒã¿ã¹ããªãŒã ã®å§çž®ïŒNode.jsç°å¢ïŒïŒ
const fs = require('fs');
const zlib = require('zlib');
const { pipeline } = require('stream');
const { promisify } = require('util');
const pipe = promisify(pipeline);
async function compressFile(inputPath, outputPath) {
const gzip = zlib.createGzip();
const source = fs.createReadStream(inputPath);
const destination = fs.createWriteStream(outputPath);
try {
await pipe(source, gzip, destination);
console.log('Compression completed.');
} catch (err) {
console.error('An error occurred during compression:', err);
}
}
// 䜿çšäŸ
const inputFilePath = 'large_input.txt';
const outputFilePath = 'large_input.txt.gz';
// ãã¹ãçšã«å€§ããªãããŒãã¡ã€ã«ãäœæãã
const largeData = Array.from({ length: 1000000 }, (_, i) => `Line ${i}\n`).join('');
fs.writeFileSync(inputFilePath, largeData);
compressFile(inputFilePath, outputFilePath).catch(err => console.error("Overall error:", err));
説æïŒ
compressFile()颿°ã¯ãzlib.createGzip()ã䜿çšããŠgzipå§çž®ã¹ããªãŒã ãäœæããŸããpipeline()颿°ã¯ããœãŒã¹ã¹ããªãŒã ïŒå ¥åãã¡ã€ã«ïŒããã©ã³ã¹ãã©ãŒã ã¹ããªãŒã ïŒgzipå§çž®ïŒãããã³ãã¹ãã£ããŒã·ã§ã³ã¹ããªãŒã ïŒåºåãã¡ã€ã«ïŒãæ¥ç¶ããŸããããã«ãããã¹ããªãŒã 管çãšãšã©ãŒäŒæãç°¡çŽ åãããŸãã- å§çž®ããã»ã¹äžã«çºçããå¯èœæ§ã®ãããšã©ãŒããã£ããããããã«ããšã©ãŒãã³ããªã³ã°ãçµã¿èŸŒãŸããŠããŸãã
- Transformã¹ããªãŒã ã¯ãã¢ãžã¥ãŒã«åŒã§å¹ççãªæ¹æ³ã§ããŒã¿ãåŠçããããã®åŒ·åãªæ¹æ³ã§ãã
pipeline颿°ã¯ãããã»ã¹äžã«ãšã©ãŒãçºçããå Žåã«é©åãªã¯ãªãŒã³ã¢ããïŒã¹ããªãŒã ã®ã¯ããŒãºïŒãè¡ããŸããããã«ãããæåã§ã®ã¹ããªãŒã ãã€ãã³ã°ãšæ¯èŒããŠãšã©ãŒãã³ããªã³ã°ãå€§å¹ ã«ç°¡çŽ åãããŸãã
JavaScriptã¹ããªãŒã ãªãœãŒã¹æé©åã®ãã¹ããã©ã¯ãã£ã¹
- é å»¶è©äŸ¡ã䜿çšããïŒ ãžã§ãã¬ãŒã¿ãšéåæã€ãã¬ãŒã¿ã䜿çšããŠãªã³ããã³ãã§ããŒã¿ãåŠçããã¡ã¢ãªæ¶è²»ãæå°éã«æããŸãã
- äžŠè¡æ§ãå¶éããïŒ åææäœã®æ°ãå¶åŸ¡ããŠããªãœãŒã¹ã®éè² è·ãé¿ããŸãã
- ãšã©ãŒãåªé
ã«åŠçããïŒ
try...catch...finallyãããã¯ã䜿çšããŠäŸå€ãåŠçããé©åãªãªãœãŒã¹ã¯ãªãŒã³ã¢ãããä¿èšŒããŸãã - ãªãœãŒã¹ãæç€ºçã«éããïŒ ãã¡ã€ã«ãã³ãã«ããããã¯ãŒã¯æ¥ç¶ããã®ä»ã®ãªãœãŒã¹ãäžèŠã«ãªã£ããã確å®ã«éããŸãã
- ãªãœãŒã¹äœ¿çšéãç£èŠããïŒ ããŒã«ã䜿çšããŠã¡ã¢ãªäœ¿çšéãCPU䜿çšéããã®ä»ã®ãªãœãŒã¹ã¡ããªã¯ã¹ãç£èŠããæœåšçãªããã«ããã¯ãç¹å®ããŸãã
- é©åãªããŒã«ãéžæããïŒ ç¹å®ã®ã¹ããªãŒã åŠçã®ããŒãºã«é©ããã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãéžæããŸããäŸãã°ãããé«åºŠãªã¹ããªãŒã æäœæ©èœã®ããã«Highland.jsãRxJSã®ãããªã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããã
- ããã¯ãã¬ãã·ã£ãŒãèæ ®ããïŒ ãããã¥ãŒãµãŒãã³ã³ã·ã¥ãŒããŒãããå€§å¹ ã«éãã¹ããªãŒã ãæ±ãå Žåãã³ã³ã·ã¥ãŒããŒãå§åãããã®ãé²ãããã«ããã¯ãã¬ãã·ã£ãŒã¡ã«ããºã ãå®è£ ããŸããããã«ã¯ãããŒã¿ã®ãããã¡ãªã³ã°ããªã¢ã¯ãã£ãã¹ããªãŒã ã®ãããªæè¡ã®äœ¿çšãå«ãŸããŸãã
- ã³ãŒãããããã¡ã€ãªã³ã°ããïŒ ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠãã¹ããªãŒã åŠçãã€ãã©ã€ã³ã®ããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ããŸããããã«ãããã³ãŒããæå€§éã®å¹çã§æé©åã§ããŸãã
- åäœãã¹ããäœæããïŒ ã¹ããªãŒã åŠçã³ãŒãã培åºçã«ãã¹ãããŠããšã©ãŒæ¡ä»¶ãå«ãããŸããŸãªã·ããªãªãæ£ããåŠçããããšã確èªããŸãã
- ã³ãŒããææžåããïŒ ã¹ããªãŒã åŠçããžãã¯ãæç¢ºã«ææžåããŠãä»ã®äººïŒãããŠå°æ¥ã®èªåïŒãçè§£ããç¶æããããããŸãã
çµè«
å¹ççãªãªãœãŒã¹ç®¡çã¯ãããŒã¿ã¹ããªãŒã ãåŠçããã¹ã±ãŒã©ãã«ã§é«æ§èœãªJavaScriptã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããã€ãã¬ãŒã¿ãã«ããŒããžã§ãã¬ãŒã¿ãéåæã€ãã¬ãŒã¿ãããã³ãã®ä»ã®æè¡ã掻çšããããšã§ãã¡ã¢ãªæ¶è²»ãæå°éã«æãããªãœãŒã¹ãªãŒã¯ãé²ãããšã©ãŒãåªé ã«åŠçããå ç¢ã§å¹ççãªã¹ããªãŒã åŠçãã€ãã©ã€ã³ãäœæã§ããŸããã¢ããªã±ãŒã·ã§ã³ã®ãªãœãŒã¹äœ¿çšéãç£èŠããã³ãŒãããããã¡ã€ãªã³ã°ããŠæœåšçãªããã«ããã¯ãç¹å®ããããã©ãŒãã³ã¹ãæé©åããããšãå¿ããªãã§ãã ãããæäŸãããäŸã¯ãNode.jsãšãã©ãŠã¶ç°å¢ã®äž¡æ¹ã«ããããããã®æŠå¿µã®å®çšçãªå¿çšã瀺ããŠããããããã®æè¡ãå¹ åºãçŸå®äžçã®ã·ããªãªã«é©çšããããšãã§ããŸãã